home *** CD-ROM | disk | FTP | other *** search
- /* Startup Selector */
- /* by OLIVERES Jean-Marc */
- /* (c) 1996 Moonchild Prod. */
- /* 07.09.96 */
-
- OPT REG=3
-
- MODULE 'dos/dos','dos/dostags','intuition/intuition','intuition/screens',
- 'gadtools','libraries/gadtools','reqtools','libraries/reqtools',
- 'exec/nodes','exec/lists','amigalib/lists'
-
- ENUM ER_NONE,ER_WIN,ER_DIR,ER_NODIR,ER_LIB,ER_SCR,ER_MOUSE,ER_EXAM
- ENUM WBS=1,USER,LVID
-
- RAISE ER_WIN IF OpenWindowTagList()=NIL,
- ER_LIB IF OpenLibrary()=NIL,
- ER_SCR IF LockPubScreen()=NIL,
- ER_MOUSE IF Mouse()<>1,
- ER_EXAM IF Examine()=NIL
-
- CONST BIGGER=-1,SMALLER=1
- CONST G_HEIGHT=8
-
- DEF ptrwin=NIL:PTR TO window,glist=NIL
- DEF scr=NIL:PTR TO screen,visual,menu
- DEF g_width,lv_height
- DEF fic_nbr=0,fic_lng,fic_pre,fic_fin,fic_user
- DEF info:fileinfoblock,dirscan,dirlock
- DEF ch[70]:STRING,count=0,count2=0
- DEF list=NIL:PTR TO lh
- DEF node=NIL:PTR TO ln
-
- PROC main() HANDLE
- DEF mes=NIL:PTR TO intuimessage
- DEF id,gad:PTR TO gadget,i,userdata,idcmp,item
- VOID '$VER:Startup Selector 1.05 (07.09.96) Moonchild Prod.'
- AssignPath('ENV','RAM')
- exceptioninfo:='gadtools.library'
- gadtoolsbase:=OpenLibrary(exceptioninfo,37)
- exceptioninfo:='reqtools.library'
- reqtoolsbase:=OpenLibrary(exceptioninfo,37)
- Rename('SYS:WBStartupOld','SYS:WBStartup')
- Rename('SYS:WBStartupOld.info','SYS:WBStartup.info')
- Rename('SYS:S/User-StartupOld','SYS:S/User-Startup')
- choicerep()
- Mouse()
- scr:=LockPubScreen(NIL)
- visual:=GetVisualInfoA(scr,NIL)
- scanstartupdir()
- largername()
- addstartgadget()
- window()
- createmen()
- REPEAT
- IF mes:=Gt_GetIMsg(ptrwin.userport)
- idcmp:=mes.class
- SELECT idcmp
- CASE IDCMP_MENUPICK
- item:=ItemAddress(menu,mes.code)
- IF item<>NIL
- id:=Long(item+34)
- IF id=1 THEN req('StartupSelector\n Version 1.05\n Copyright (c) 1996\n'+
- 'Moonchild Prod.')
- IF id=2 THEN SystemTagList('NewCli',NIL)
- IF id=3
- Gt_ReplyIMsg(mes)
- IF scr THEN UnlockPubScreen(NIL,scr)
- IF ptrwin THEN CloseW(ptrwin)
- quit()
- ENDIF
- ENDIF
- CASE IDCMP_GADGETUP
- gad:=mes.iaddress
- userdata:=gad.userdata
- SELECT userdata
- CASE WBS
- IF count=0 THEN count:=1 ELSE count:=0
- CASE USER
- IF count2=0 THEN count2:=1 ELSE count2:=0
- CASE LVID
- node:=list.head
- FOR i:=1 TO mes.code DO node:=node.succ
- Gt_ReplyIMsg(mes)
- launchstart(node.name)
- ENDSELECT
- ENDSELECT
- Gt_ReplyIMsg(mes)
- ELSE
- WaitPort(ptrwin.userport)
- ENDIF
- UNTIL idcmp=IDCMP_CLOSEWINDOW
- Raise(ER_MOUSE)
- EXCEPT
- SELECT exception
- CASE ER_WIN ; req('Unable to open window !')
- CASE ER_DIR ; req('Can''t find your directory !')
- CASE ER_NODIR ; req('Not a directory !')
- CASE ER_SCR ; req('Unable to lock Workbench screen !')
- CASE ER_EXAM ; req('Can''t acces directory or file !')
- CASE ER_LIB
- StrCopy(ch,'can''t open ')
- StrAdd(ch,exceptioninfo)
- req(ch)
- CASE ER_MOUSE
- StrCopy(ch,dirscan,ALL)
- AddPart(ch,'Startup-Sequence',70)
- IF (dirlock:=Lock(ch,ACCESS_READ))=NIL
- req('There is no Startup-Sequence file in the directory !\n' +
- 'Press ''OK'' to load the Workbench so you can continue')
- SystemTagList('hd0:c/LoadWB',NIL)
- quit()
- ENDIF
- launchstart('Startup-Sequence')
- ENDSELECT
- quit()
- ENDPROC
-
- PROC req(msg)
- RtEZRequestA(msg,'OK',0,0,[RTEZ_FLAGS ,EZREQF_CENTERTEXT,
- RT_REQPOS ,REQPOS_CENTERSCR,
- NIL])
- ENDPROC
-
- PROC choicerep()
- DEF myargs:PTR TO LONG,rdargs
- myargs:=[0]
- rdargs:=ReadArgs('PATH/O',myargs,NIL)
- IF myargs[]=0
- dirscan:='SYS:S/start/'
- ELSE
- dirscan:=String(StrLen(myargs[0]))
- StrCopy(dirscan,myargs[0])
- ENDIF
- IF rdargs THEN FreeArgs(rdargs)
- ENDPROC
-
- PROC scanstartupdir()
- IF (dirlock:=Lock(dirscan,ACCESS_READ))=NIL THEN Raise(ER_NODIR)
- Examine(dirlock,info)
- IF info.direntrytype <= 0 THEN Raise(ER_NODIR)
- WHILE ExNext(dirlock,info)
- INC fic_nbr
- getstartupname(info.filename)
- ENDWHILE
- IF fic_nbr=0 THEN nofile()
- ENDPROC
-
- PROC nofile()
- req('HEY !!! Why do you run me if there''s no script in the directory !\n' +
- 'Press ''OK'' to load the Workbench so you can continue')
- SystemTagList('hd0:c/LoadWB',NIL)
- quit()
- ENDPROC
-
- PROC getstartupname(infofilename)
- DEF fic_chaine,length,var,var2
- DEF fic_chaineUp[30]:STRING,fic_preUp[30]:STRING,fic_finUp[30]:STRING
- length:=StrLen(infofilename)
- fic_chaine:=String(length)
- StrCopy(fic_chaine,infofilename)
-
- StrCopy(fic_chaineUp,fic_chaine)
- UpperStr(fic_chaineUp)
- IF fic_pre
- StrCopy(fic_preUp,fic_pre)
- UpperStr(fic_preUp)
- StrCopy(fic_finUp,fic_fin)
- UpperStr(fic_finUp)
- ENDIF
-
- IF fic_nbr=1
- fic_pre:=fic_chaine
- ELSEIF OstrCmp(fic_preUp,fic_chaineUp)=BIGGER
- Link(fic_chaine,fic_pre)
- fic_pre:=fic_chaine
- RETURN
- ELSEIF OstrCmp(fic_finUp,fic_chaineUp)=SMALLER
- Link(fic_fin,fic_chaine)
- ELSE
- var:=fic_pre
- var2:=Next(fic_pre)
- WHILE var2<>NIL
-
- StrCopy(fic_finUp,var2)
- UpperStr(fic_finUp)
-
- IF OstrCmp(fic_finUp,fic_chaineUp)=BIGGER
- Link(fic_chaine,var2)
- Link(var,fic_chaine)
-
- RETURN
- ENDIF
- var:=Next(var)
- var2:=Next(var2)
- ENDWHILE
- ENDIF
- fic_fin:=fic_chaine
- ENDPROC
-
- PROC largername()
- DEF max=0,len
- fic_user:=fic_pre
- WHILE (fic_user:=Next(fic_user))<>NIL
- len:=StrLen(fic_user)
- IF len>max THEN max:=len
- ENDWHILE
- fic_lng:=max
- ENDPROC
-
- PROC addstartgadget()
- DEF gadget,posy,tmp
- NEW list
- newList(list)
- gadget:=CreateContext({glist})
- posy:=0
- g_width:=fic_lng*8+8
- tmp:=fic_nbr
- IF tmp<8
- lv_height:=8*G_HEIGHT+4
- ELSEIF tmp>29
- lv_height:=29*G_HEIGHT+4
- ELSE
- lv_height:=tmp*G_HEIGHT+4
- ENDIF
- filllist()
- gadget:=CreateGadgetA(LISTVIEW_KIND,gadget,
- [0,posy,g_width+20,lv_height,0,0,0,0,visual,LVID]:newgadget,
- [GTLV_LABELS,list,
- GTLV_SELECTED,TRUE,
- 0])
- gadget:=CreateGadgetA(CHECKBOX_KIND,gadget,
- [g_width+22,0,12,12,0,0,0,0,visual,USER]:newgadget,NIL)
- gadget:=CreateGadgetA(CHECKBOX_KIND,gadget,
- [g_width+22,12,12,12,0,0,0,0,visual,WBS]:newgadget,NIL)
- ENDPROC
-
- PROC filllist()
- NEW node
- fic_user:=fic_pre
- node.name:=String(StrLen(fic_user))
- StrCopy(node.name,fic_user,ALL)
- AddHead(list,node)
- WHILE (fic_user:=Next(fic_user))<>NIL
- NEW node
- node.name:=String(StrLen(fic_user))
- StrCopy(node.name,fic_user,ALL)
- AddTail(list,node)
- ENDWHILE
- ENDPROC
-
- PROC window()
- DEF widcmp,wflags,wport,rport,beveltags
- DEF w_width,w_left,w_top
- w_width:=g_width+213+20
- w_left:=(scr.width-w_width)/2
- w_top:=(scr.height-lv_height)/2
- beveltags:=[GT_VISUALINFO,visual,GTBB_FRAMETYPE,BBFT_BUTTON,NIL]
- widcmp:=IDCMP_CLOSEWINDOW OR IDCMP_GADGETUP OR IDCMP_MENUPICK OR LISTVIEWIDCMP
- wflags:=WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_GIMMEZEROZERO+WFLG_NEWLOOKMENUS
- ptrwin:=OpenWindowTagList(NIL,[WA_TITLE ,'Startup-Selector 1.05',
- WA_GADGETS ,glist,
- WA_LEFT ,w_left,
- WA_TOP ,w_top,
- WA_INNERWIDTH ,w_width,
- WA_INNERHEIGHT ,lv_height,
- WA_IDCMP ,widcmp,
- WA_FLAGS ,wflags,
- WA_AUTOADJUST ,-1,
- WA_ACTIVATE ,-1,
- NIL])
- Gt_RefreshWindow(ptrwin,NIL)
- wport:=SetStdRast(ptrwin.rport)
- rport:=ptrwin.rport
- TextF(g_width+32+20,8,'Disable User-Startup ?')
- TextF(g_width+32+20,20,'Disable WBStartup ?')
- DrawBevelBoxA(rport,g_width+29+20,0,184,11,beveltags)
- DrawBevelBoxA(rport,g_width+29+20,12,160,11,beveltags)
- ENDPROC
-
- PROC createmen()
- menu:=CreateMenusA([1,0,'Projet',0,0,0,0,
- 2,0,'About',0,0,0,1,
- 2,0,NM_BARLABEL,0,0,0,0,
- 2,0,'NewCli',0,0,0,2,
- 2,0,NM_BARLABEL,0,0,0,0,
- 2,0,'Quit',0,0,0,3,
- 0,0,0,0,0,0,0]:newmenu,[GTMN_FRONTPEN,1,
- GTMN_NEWLOOKMENUS,TRUE,
- NIL])
- LayoutMenusA(menu,visual,NIL)
- SetMenuStrip(ptrwin,menu)
- ENDPROC
-
- PROC launchstart(file)
- DEF launch
- IF count=1
- IF (Rename('SYS:WBStartup','SYS:WBStartupOld'))=NIL
- req('Can''t rename WBStartup !\n Name is not ''WBStartupOld''...')
- RETURN
- ELSEIF (Rename('SYS:WBStartup.info','SYS:WBStartupOld.info'))=NIL
- req('Can''t rename WBStartup.info !\n Name is not ''WBStartupOld.info''...')
- RETURN
- ENDIF
- ENDIF
- IF count2=1
- IF (Rename('SYS:S/User-Startup','SYS:S/User-StartupOld'))=NIL
- req('Can''t rename User-Startup !\n Name is not ''User-StartupOld''...')
- RETURN
- ENDIF
- ENDIF
- StrCopy(ch,dirscan,ALL)
- AddPart(ch,file,70)
- setscriptattr(ch)
- IF scr THEN UnlockPubScreen(NIL,scr)
- IF ptrwin THEN CloseW(ptrwin)
- IF (launch:=SystemTagList(ch,NIL))=TRUE
- req('Can''t execute this script !\n Please try another one ...')
- RETURN
- ENDIF
- quit()
- ENDPROC
-
- PROC setscriptattr(file)
- DEF fh,fib:PTR TO fileinfoblock,mask
- IF FileLength(file)>-1
- fh:=Open(file,OLDFILE)
- NEW fib
- ExamineFH(fh, fib)
- mask:=fib.protection
- Close(fh)
- mask:=mask OR FIBF_SCRIPT
- SetProtection(file,mask)
- ENDIF
- ENDPROC
-
- PROC quit()
- IF menu THEN FreeMenus(menu)
- IF ptrwin THEN ClearMenuStrip(ptrwin)
- IF visual THEN FreeVisualInfo(visual)
- IF dirlock THEN UnLock(dirlock)
- IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
- IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
- OpenWorkBench()
- CleanUp(0)
- ENDPROC
-